category: main
step: 2_staging
sub_step: 2_combine
doc_status: ready
language: rus
main_number: "04"
macro combine
Name | Category | In Main Macro | Doc Status |
---|---|---|---|
custom_union_relations | auxiliary | combine, create_dataset | ready |
get_relations_by_re | auxiliary | normalize, combine | ready |
Макрос combine
предназначен для объединения данных по каждому пайплайну.
Имя dbt-модели (=имя файла в формате sql в папке models) должно соответствовать шаблону:
combine_{название_пайплайна}
.
Например, combine_events
.
Внутри этого файла вызывается макрос:
{{ datacraft.combine() }}
Над вызовом макроса в файле будет указана зависимость данных через —depends_on
. То есть целиком содержимое файла выглядит, например, вот так:
-- depends_on: {{ ref('join_appmetrica_events') }}
-- depends_on: {{ ref('join_ym_events') }}
{{ datacraft.combine() }}
Этот макрос принимает следующие аргументы:
params
(по умолчанию: none)disable_incremental
(по умолчанию: none)override_target_model_name
(по умолчанию: none)date_from
(по умолчанию: none)date_to
(по умолчанию: none)limit0
(по умолчанию: none)Сначала макрос считает имя модели - либо из передаваемого аргумента (
override_target_model_name
), либо из имени файла (this.name
). При использовании аргумента override_target_model_name
макрос работает так, как если бы находился в модели с именем, равным значению override_target_model_name
.
Название модели, полученное тем или иным способом, разбивается на части по знаку нижнего подчёркивания. Например, название combine_events
разобьётся на 2 части, из этих частей макрос возьмёт в работу:
pipeline_name
→ eventsМодели шага combine
могут иметь названия из 2 или 3 частей, вторая часть всегда пайплайн.
Если модель относится к пайплайну registry
, то у неё ещё есть линк. Например, для модели combine_registry_appprofilematching
есть:
link_name
→ appprofilematchingЕсли имя модели не соответствует шаблону - макрос выдаст ошибку.
Далее макрос будет искать по паттерну соответствующие ему таблицы из предыдущего шага (join
).
Паттерн для пайплайна registry
:
'join' ~ '_[^_]+_' ~ pipeline_name ~ '_' ~ link_name
для всех остальных данных паттерн:
'join' ~ '_[^_]+_' ~ pipeline_name
Макрос находит все соответствующие таблицы благодаря работе другого макроса - get_relations_by_re.
Если никакие данные не будут найдены, макрос выдаст ошибку.
Далее полученные данные автоматически объединятся (UNION ALL
) при помощи макроса custom_union_relations. Таким образом сформируется таблица-источник - source_table
.
Если данные относятся к пайплайнам datestat
или events
, то материализация таблицы будет инкрементальной:
{{ config(
materialized='incremental',
order_by=('__date', '__table_name'),
incremental_strategy='delete+insert',
unique_key=['__date', '__table_name'],
on_schema_change='fail'
) }}
Для других пайплайнов материализация будет другой:
{{ config(
materialized='table',
order_by=('__table_name'),
on_schema_change='fail'
) }}
В автоматически генерируемом SQL-запросе в блоке SELECT будут выбраны все столбцы из ранее созданной source_table
. Столбец table_name
будет обёрнут в LowCardinality
для улучшения производительности.
Если аргумент limit0
активирован, то в конце SQL-запроса будет добавлено LIMIT 0
.
Файл в формате sql в папке models. Название файла:
combine_events
Содержимое файла:
-- depends_on: {{ ref('join_appmetrica_events') }}
-- depends_on: {{ ref('join_ym_events') }}
{{ datacraft.combine() }}
Это четвёртый из основных макросов.